package com.jwt.utils;

import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

/**
 * 该jwt使用传统写法，被官方标记已过时
 */
public class JwtUtil {
    /**
     *
     * JWT：
     * Header：包含令牌的类型（通常是JWT）和所使用的签名算法（如HMAC SHA256）。
     * Payload：包含声明（Claims），这些声明是关于用户或应用的信息，例如用户ID、用户名、权限等。
     * Signature：用于验证消息的完整性和确保消息未被篡改。
     *
     * @param secretKey jwt密钥
     * @param ttlMillis jwt过期时间
     * @param claims jwt载体信息
     * @return
     */
    public static String createJWT(String secretKey, long ttlMillis, Map<String,Object> claims){
        //指定签名算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

        //生成jwt时间
        long expMills = System.currentTimeMillis()+ttlMillis;
        Date exp = new Date(expMills);

        //设置jwt的body
        JwtBuilder builder = Jwts.builder()
                .setClaims(claims)
                .signWith(signatureAlgorithm,secretKey.getBytes(StandardCharsets.UTF_8))
                .setExpiration(exp);

        return builder.compact();
    }

//    /**
//     * Token 解密
//     * @param secretKey jwt密钥
//     * @param token 加密后的token
//     * @return
//     */
//    public static Claims parseJWT(String secretKey,String token){
//        Claims claims = Jwts.parser()
//                // 设置签名的秘钥
//                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
//                // 设置需要解析的jwt 这个方法在最新版本已被删除
//                .parseClaimsJws(token).getBody();
//        return claims;
//    }
}
